import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let effectItems = [
    {
        "label": "Effect_Create",
        "insertText": dedent`
        GUI:Effect_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:effecttype}, \${6:effectid}, \${7:sex}, \${8:act}, \${9:dir}, \${10:speed})
        `,
        "documentation": dedent`# 创建特效
        [在线文档](http://engine-doc.996m2.com/web/#/22/2167)

        | 参数       | 必选 | 类型   | 注释                                                         |
        | :--------- | :--- | :----- | :----------------------------------------------------------- |
        | parent     | 是   | obj    | 父节点对象                                                   |
        | ID         | 是   | string | 唯一ID                                                       |
        | x          | 是   | int    | 位置 横坐标                                                  |
        | y          | 是   | int    | 位置 纵坐标                                                  |
        | effecttype | 是   | int    | 0 特效 1 NPC 2 怪物 3 技能 4 人物 5 武器 6 翅膀 7 发型 8 盾牌[3.40.3版本] |
        | effectid   | 是   | int    | 特效id                                                       |
        | sex        | 否   | int    | 性别(0 男 1 女)                                              |
        | act        | 否   | int    | 0 待机 1 走 2 攻击 3 施法 4 死亡 5 跑步                      |
        | dir        | 否   | int    | 方向                                                         |
        | speed      | 否   | int    | 播放速度                                                     |

        - 代码示例

        \`\`\`
        -- 特效展示 Ctrl + F4 查看
        local sfx = GUI:Effect_Create(parent, "sfx", 0, 0, 0, 4004, 0, 0, 3, 1)
        \`\`\`
        `
    },
    {
        "label": "Effect_play",
        "insertText": dedent`
        GUI:Effect_play(\${1:widget}, \${2:act}, \${3:dir}, \${4:isLoop}, \${5:speed}, \${6:isSequence})
        `,
        "documentation": dedent`# 特效播放
        [在线文档](http://engine-doc.996m2.com/web/#/22/2167)

        | 参数       | 必选 | 类型    | 注释                                    |
        | :--------- | :--- | :------ | :-------------------------------------- |
        | widget     | 是   | obj     | 特效对象                                |
        | act        | 是   | int     | 0 待机 1 走 2 攻击 3 施法 4 死亡 5 跑步 |
        | dir        | 是   | int     | 方向                                    |
        | isLoop     | 是   | bool    | 是否循环播放                            |
        | speed      | 否   | int     | 播放速度                                |
        | isSequence | 否   | boolean | 倒放参数 [仅false为倒放特效 ]           |

        `
    },
    {
        "label": "Effect_stop",
        "insertText": dedent`
        GUI:Effect_stop(\${1:widget}, \${2:frameIndex}, \${3:act}, \${4:dir})
        `,
        "documentation": dedent`# 特效停止
        [在线文档](http://engine-doc.996m2.com/web/#/22/2167)

        | 参数       | 必选 | 类型 | 注释                                    |
        | :--------- | :--- | :--- | :-------------------------------------- |
        | widget     | 是   | obj  | 特效对象                                |
        | frameIndex | 否   | int  | 第几帧                                  |
        | act        | 否   | int  | 0 待机 1 走 2 攻击 3 施法 4 死亡 5 跑步 |
        | dir        | 否   | int  | 方向                                    |

        `
    },
    {
        "label": "Effect_addOnCompleteEvent",
        "insertText": dedent`
        GUI:Effect_addOnCompleteEvent(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 特效播放完成事件
        [在线文档](http://engine-doc.996m2.com/web/#/22/2167)

        | 参数   | 必选 | 类型     | 注释             |
        | :----- | :--- | :------- | :--------------- |
        | widget | 是   | obj      | 特效对象         |
        | value  | 是   | function | 播放完成回调函数 |

        `
    },
    {
        "label": "Effect_setAutoRemoveOnFinish",
        "insertText": dedent`
        GUI:Effect_setAutoRemoveOnFinish(\${1:widget})
        `,
        "documentation": dedent`# 设置特效播放完自动移除 [3.40.3版本]
        [在线文档](http://engine-doc.996m2.com/web/#/22/2167)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 特效对象 |

        `
    }
]



export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    effectItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
